package banking;

import java.util.ArrayList;

/**
 * 描述：客户类
 * */

public class Customer {
    // a. 声明三个私有对象属性：firstName、lastName 和 account。
	private String firstName;
	private String lastName;
    // 添加一个 Customer 类。Customer 类将包含一个 Account对象。
	private Account account;
	// 1．修改 Customer 类来处理具有多种类型的联合账户。
	//（例如用数组表示多重性一节所作的，该类必须包括以下的公有方法：
//	private Account[] accounts; // 所有账户
	//使用 ArrayList 实现多重的账户关系。
	private ArrayList<Account> accounts;
	private int numOfAccounts;  // 当前账户数量

	//使其包含两个关联属性：savingAccount 和 checkingAccount，这两个属性的缺省值是 null
	private SavingAccount savingAccount; // 储蓄账户
	private CheckingAccount checkingAccount; // 支票账户

	// 修改 Customer 类，使其拥有两个账户：一个储蓄账户和一个支票账户：两个都是可选的。
	public Customer(String f, String l, Account act) {
//		firstName = f;
//		lastName = l;
//		setAccount(act);
//		this.account = act;
//		numOfAccounts = 1;
//		accounts = new Account[5];
//		accounts[0] = act;

	}

	//包含两个访问方法：getSaving 和 getChecking，这两个方法分别返回储蓄账户和支票账户。
	public SavingAccount getSavings() {
		return savingAccount;
	}
	// 支票账户
	public CheckingAccount getChecking() {
		return checkingAccount;
	}
	// 包含两个相反的方法：SetSaving 和 setChecking，这两个方法分别为
	//savingAccount 和 checkingAccount 这两个关联属性赋值。
	public void setSavings(SavingAccount act) {
		savingAccount = act;
	}
	// checkingAccount
	public void setChecking(CheckingAccount act) {
		checkingAccount = act;
	}



	// 构造函数 一个人可以拥有多个账户
	public Customer(String f, String l, int numOfAccounts) {
//		firstName = f;
//		lastName = l;
//		accounts = new Account[numOfAccounts];
//		this.numOfAccounts = 0;
	}
	//添加账户
	public void addAccount(Account act) {
//		if (numOfAccounts < accounts.length) {
//			accounts[numOfAccounts++] = act;
//		} else {
//			System.out.println("无法添加更多账户，已达到最大数量");
//		}
		if (numOfAccounts <= accounts.size()) {
			accounts.add(act);
			numOfAccounts++;
		} else {
			System.out.println("无法添加更多账户，已达到最大数量");
		}
	}
	// 获取账户
	public Account getAccount(int index) {
		if (index >= 0 && index < numOfAccounts) {
//			return accounts[index];
			return accounts.get(index);
		} else {
			System.out.println("无效的索引");
			return null;
		}
	}
	// 获取账户数量
	public int getNumOfAccounts() {
		return numOfAccounts;
	}


    // b. 声明一个公有构造器，这个构造器带有两个代表对象属性的参数（f 和 l）
	public Customer(String f, String l) {
		// //每个 Customer 可以有多个 Account。（声明至少有 5 个）
//		accounts = new Account[5];
		accounts = new ArrayList<Account>();
		numOfAccounts = 0;
		firstName = f;
		lastName = l;


	}
    // c. 声明两个公有存取器来访问该对象属性，
    // 方法 getFirstName 和 getLastName返回相应的属性。
	public String getFirstName() {
		return firstName;
	}

	public String getLastName() {
		return lastName;
	}
	// e. 声明 getAccount 方法以获取 account 属性。
    // d. 声明 setAccount 方法来对 account 属性赋值。
	public Account getAccount() {
		return account;
	}

	public void setAccount(Account act) {
		account = act;
	}
}